package org.ytor.core.sqlflow.builder.select;

import org.ytor.core.sqlflow.SFunction;

/**
 * created by yangtong on 2025/8/11 10:06:45
 * <br/>
 * ORDER 阶段：
 * 允许：继续追加 ORDER BY / 或进入 LIMIT / OFFSET / 或终止
 * 不允许：JOIN/WHERE（通过返回类型限制）
 */
public interface OrderStage extends Terminable, ISelect {

    /**
     * 追加 ORDER BY 条目（升序）
     */
    <T> OrderStage orderByAsc(SFunction<T, ?> f);

    /**
     * 追加 ORDER BY 条目（降序）
     */
    <T> OrderStage orderByDesc(SFunction<T, ?> f);

    /**
     * 追加 ORDER BY 条目（原生片段）
     */
    OrderStage orderByAscRaw(String... raw);

    /**
     * 追加 ORDER BY 条目（原生片段）
     */
    OrderStage orderByDescRaw(String... raw);

    /**
     * 进入 LIMIT 阶段
     */
    LimitStage limit(Integer limit);

    /**
     * 进入 OFFSET 阶段
     */
    OffsetStage offset(Integer offset);
}
